/**
 *
 */
package ar.pmt.vista.formularios;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.springframework.beans.factory.BeanFactory;

import ar.pmt.core.constantes.Constantes;
import ar.pmt.modelo.beans.Peticion;
import ar.pmt.modelo.beans.Proyecto;
import ar.pmt.modelo.beans.Tecnologia;
import ar.pmt.modelo.businessObject.SrvcControlAvance;
import ar.pmt.vista.beans.TecnologiaBean;
import ar.pmt.vista.manager.impl.BeanVistaManager;

/**
 * @author gburgener
 *
 */

public class ProyectoNuevoForm extends AbstractValidatorForm {

	/**
	 * UID
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * proyecto
	 */
	private String proyecto;

	/**
	 * lenguajes
	 */
	private Collection<TecnologiaBean> lenguajes;
	/**
	 * lenguajeSel
	 */
	private Integer lenguajeSel[];
	/**
	 * frameworks
	 */
	private Collection<TecnologiaBean> frameworks;
	/**
	 * frameworkSel
	 */
	private Integer frameworkSel[];
	/**
	 * basesDeDatos
	 */

	private Collection<TecnologiaBean> basesDeDatos;

	/**
	 * bbddSel
	 */
	private Integer bbddSel[];
	/**
	 * patrones
	 */
	private Collection<TecnologiaBean> patrones;
	/**
	 * patronSel
	 */
	private Integer patronSel[];

	/**
	 * @return the basesDeDatos
	 */
	public Collection<TecnologiaBean> getBasesDeDatos() {
		return basesDeDatos;
	}

	/**
	 * @param basesDeDatos
	 *           the basesDeDatos to set
	 */
	public void setBasesDeDatos(Collection<TecnologiaBean> basesDeDatos) {
		this.basesDeDatos = basesDeDatos;
	}



	/**
	 * @return the lenguajeSel
	 */
	public final Integer[] getLenguajeSel() {
		return lenguajeSel;
	}

	/**
	 * @return the frameworkSel
	 */
	public final Integer[] getFrameworkSel() {
		return frameworkSel;
	}

	/**
	 * @return the bbddSel
	 */
	public final Integer[] getBbddSel() {
		return bbddSel;
	}

	/**
	 * @return the patronSel
	 */
	public final Integer[] getPatronSel() {
		return patronSel;
	}

	/**
	 * @param lenguajeSel the lenguajeSel to set
	 */
	public final void setLenguajeSel(Integer[] lenguajeSel) {
		this.lenguajeSel = lenguajeSel;
	}

	/**
	 * @param frameworkSel the frameworkSel to set
	 */
	public final void setFrameworkSel(Integer[] frameworkSel) {
		this.frameworkSel = frameworkSel;
	}

	/**
	 * @param bbddSel the bbddSel to set
	 */
	public final void setBbddSel(Integer[] bbddSel) {
		this.bbddSel = bbddSel;
	}

	/**
	 * @param patronSel the patronSel to set
	 */
	public final void setPatronSel(Integer[] patronSel) {
		this.patronSel = patronSel;
	}

	/**
	 * @return the frameworks
	 */
	public Collection<TecnologiaBean> getFrameworks() {
		return frameworks;
	}

	/**
	 * @param frameworks
	 *           the frameworks to set
	 */
	public void setFrameworks(Collection<TecnologiaBean> frameworks) {
		this.frameworks = frameworks;
	}

	/**
	 * @return the lenguajes
	 */
	public Collection<TecnologiaBean> getLenguajes() {
		return lenguajes;
	}

	/**
	 * @param lenguajes
	 *           the lenguajes to set
	 */
	public void setLenguajes(Collection<TecnologiaBean> lenguajes) {
		this.lenguajes = lenguajes;
	}

	/**
	 * @return the patrones
	 */
	public Collection<TecnologiaBean> getPatrones() {
		return patrones;
	}

	/**
	 * @param patrones
	 *           the patrones to set
	 */
	public void setPatrones(Collection<TecnologiaBean> patrones) {
		this.patrones = patrones;
	}

	/**
	 * @return the proyecto
	 */
	public String getProyecto() {
		return proyecto;
	}

	/**
	 * @param proyecto
	 *           the proyecto to set
	 */
	public void setProyecto(String proyecto) {
		this.proyecto = proyecto;
	}
	/** 
	 * Metodo de carga inicial de pantalla
	 * @param request Request
	 * @param beanFactory inyectar los bean de spring
	 * @throws Exception manejada por aspecto
	 */
	@Override
	public void getLoadForm(HttpServletRequest request, BeanFactory beanFactory) throws Exception {
		//Carga de combos
		SrvcControlAvance srvcControlAvance= (SrvcControlAvance)beanFactory.getBean("srvcControlAvance");
		Collection <Tecnologia> tecnologias= srvcControlAvance.obtenerTecnlogias();

		setLenguajes(BeanVistaManager.obtenerTecnologiaBeanPorTipos(tecnologias, Constantes.TECNOLOGIA_LENGUAJE));
		setFrameworks(BeanVistaManager.obtenerTecnologiaBeanPorTipos(tecnologias, Constantes.TECNOLOGIA_FRAMEWORK));
		setBasesDeDatos(BeanVistaManager.obtenerTecnologiaBeanPorTipos(tecnologias, Constantes.TECNOLOGIA_BASEDATOS));
		setPatrones(BeanVistaManager.obtenerTecnologiaBeanPorTipos(tecnologias, Constantes.TECNOLOGIA_PATRON));

	}
	/** 
	 * Metodo de recarga de pantalla
	 * @param request Request
	 * @param type de Recarga
	 * @param beanFactory inyectar los bean de spring
	 * @throws Exception manejada por aspecto
	 */
	@Override
	public void getReLoadForm(HttpServletRequest request, int type, BeanFactory beanFactory) throws Exception {

		// TODO Auto-generated method stub

		ActionErrors errors = new ActionErrors();
		switch (type) {
		case Constantes.RELOADGUARDAR:
			//Carga de combos
			SrvcControlAvance srvcControlAvance= (SrvcControlAvance)beanFactory.getBean("srvcControlAvance");
			Collection <Tecnologia> tecnologias= srvcControlAvance.obtenerTecnlogias();
			setLenguajes(BeanVistaManager.obtenerTecnologiaBeanPorTipos(tecnologias, Constantes.TECNOLOGIA_LENGUAJE));
			setFrameworks(BeanVistaManager.obtenerTecnologiaBeanPorTipos(tecnologias, Constantes.TECNOLOGIA_FRAMEWORK));
			setBasesDeDatos(BeanVistaManager.obtenerTecnologiaBeanPorTipos(tecnologias, 
																			Constantes.TECNOLOGIA_BASEDATOS));
			setPatrones(BeanVistaManager.obtenerTecnologiaBeanPorTipos(tecnologias, Constantes.TECNOLOGIA_PATRON));

			//Insercion en base datos 
			Proyecto proyecto = (Proyecto)beanFactory.getBean("proyecto");
			proyecto.setNombre(this.getProyecto());	
			ArrayList<Integer> idTecnologias= new ArrayList<Integer>(Arrays.asList(getBbddSel()));
			idTecnologias.addAll(new ArrayList<Integer>(Arrays.asList(getFrameworkSel())));
			idTecnologias.addAll(new ArrayList<Integer>(Arrays.asList(getLenguajeSel())));
			idTecnologias.addAll(new ArrayList<Integer>(Arrays.asList(getPatronSel())));


			for (Iterator<Integer> iterator = idTecnologias.iterator(); iterator.hasNext();) {
				Integer id = (Integer) iterator.next();
				Tecnologia tecnologia = (Tecnologia) beanFactory
				.getBean("tecnologia");
				tecnologia.setId(id);
				proyecto.getTecnologias().add(tecnologia);
			}
			Collection<Peticion> peticiones= new ArrayList<Peticion>();

			proyecto.setPeticiones(peticiones );
			srvcControlAvance.crearProyecto(proyecto);

			errors = new ActionErrors();
			errors.add(Constantes.TIPO_ERROR_ADVERTENCIA, new ActionError(
					"advertencia.operacion.exito"));
			request.setAttribute(Constantes.ERRORES, errors);


		default: //code_block_default;
		}

	}

}
